package com.xunsiya.common.config.util;

import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.SftpATTRS;
import com.jcraft.jsch.SftpException;
import com.xunsiya.tools.common.string.StringUtil;

import java.io.InputStream;
import java.util.Map;

/**
 * ftp
 * @author panjun
 * @version 1.0
 * <p>
 * <p>修订人		修订时间			描述信息
 * <p>-----------------------------------------------------
 * <p>panjun	2018-11-5		初始创建
 */
public class FtpUtil {

   public  static ChannelSftp chSftp;
   public  static SftpChannel channel = new SftpChannel();

   private final static String NO_SOUCH = "no such file";



    public static void initChannelSftp(Map<String, String> parammap){
        try {
            chSftp = channel.getChannel(parammap, 60000);
        } catch (JSchException e) {
            e.printStackTrace();
        }
    }

    /**
     *
     * @throws Exception
     */
    public static void upload(InputStream in, String dist, String dir) throws Exception {

        try {
            // 首先查看下目录，如果不存在，系统会被错，捕获这个错，生成新的目录。
            chSftp.ls(dir);
        } catch (Exception e) {
            createDir(dir);
        }

        chSftp.cd(dir);
        // 代码段3
        chSftp.put(in, dist, ChannelSftp.OVERWRITE);
        in.close();
        channel.closeChannel();
    }


    /**
     * 创建一个文件目录
     */
    public static void createDir(String createpath) {
        try {
            if (isDirExist(createpath)) {
                chSftp.cd(createpath);
            }
            String[] pathArray = createpath.split("/");
            StringBuffer filePath = new StringBuffer("/");
            for (String path : pathArray) {
                if (StringUtil.isEmpty(path)) {
                    continue;
                }
                filePath.append(path + "/");
                if (isDirExist(filePath.toString())) {
                    chSftp.cd(filePath.toString());
                } else {
                    // 建立目录
                    chSftp.mkdir(filePath.toString());
                    // 进入并设置为当前目录
                    chSftp.cd(filePath.toString());
                }
            }
            chSftp.cd(createpath);
        } catch (SftpException e) {
            e.printStackTrace();
        }
    }


    /**
     * 判断目录是否存在
     */
    public static boolean isDirExist(String directory) {
        boolean isDirExistFlag = false;
        try {
            SftpATTRS sftpATTRS = chSftp.lstat(directory);
            isDirExistFlag = true;
            return sftpATTRS.isDir();
        } catch (Exception e) {
            if (NO_SOUCH.equals(e.getMessage().toLowerCase())) {
                isDirExistFlag = false;
            }
        }
        return isDirExistFlag;
    }

    /**
     * 删除文件(使用前注意了,文件删除后不可恢复)
     *
     * @param directory  文件所在目录 例如:/data/bamboodata/portal_pic/item/
     * @param deleteFile 文件名 例如:S20150815113255214171.jpg
     * @throws Exception
     */
    public static void delete(String directory, String deleteFile) throws Exception {
        chSftp.cd(directory);
        chSftp.rm(deleteFile);
    }
}
